package loveqq.niceexcel.core;

import loveqq.niceexcel.core.metadata.CellHeadMeta;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * 定位数据单元格-表头元数据管理器
 *
 * @author zhongjh@tsintergy.com
 * @date 2022-08-20
 */
public class LocateDataHeadMetas implements Iterable<CellHeadMeta> {
    /**
     * 定位数据单元格表头元数据
     */
    private final List<CellHeadMeta> cache = new ArrayList<>();

    @Override
    public Iterator<CellHeadMeta> iterator() {
        return cache.iterator();
    }

    /**
     * 是否没有定位表头
     */
    public boolean isEmpty() {
        return cache.isEmpty();
    }

    /**
     * 添加定位表头
     *
     * @param headMeta 定位表头元数据
     */
    public void put(CellHeadMeta headMeta) {
        cache.add(headMeta);
    }

    /**
     * 清空定位表头
     */
    public void clear() {
        cache.clear();
    }

    /**
     * 清空定位表头, 重置表头元数据的行索引(重置为-1)
     */
    public void clearAndResetRowIndex() {
        clearAndRestIndex(true, false);
    }

    /**
     * 清空定位表头, 重置表头元数据的列索引(重置为-1)
     */
    public void clearAndResetColumnIndex() {
        clearAndRestIndex(false, true);
    }

    /**
     * 清空定位表头, 重置表头元数据的行和列索引(重置为-1)
     */
    public void clearAndResetAllIndex() {
        clearAndRestIndex(true, true);
    }

    /**
     * 清空定位表头
     *
     * @param resetRowIndex   重置行索引
     * @param resetColumIndex 重置列索引
     */
    private void clearAndRestIndex(boolean resetRowIndex, boolean resetColumIndex) {
        Iterator<CellHeadMeta> iterator = cache.iterator();
        while (iterator.hasNext()) {
            CellHeadMeta headMeta = iterator.next();
            if (resetRowIndex) {
                headMeta.setRowIndex(-1);
            }
            if (resetColumIndex) {
                headMeta.setColumnIndex(-1);
            }
            if (resetRowIndex && resetColumIndex) {
                headMeta.setRegion(null);
            }
            iterator.remove();
        }
    }
}
